#ifndef SINSOURCE_H_
#define SINSOURCE_H_

#include "../../SAMA_Function.h"
#include <math.h>

/*模块可调参数结构体*/
typedef struct {
	float Range_Value;	    //< 幅值
	float Pals_Value;	    //< 角速度
	float Rad_Value;	    //< 初相角
	float Time;             //< 发生时间
}SINSOURCE_Par_t;


/*模块运算中间参数结构体定义*/
typedef struct {
	float Run_Time;		   //< 正弦响应模块运行时间
	float Time_Last;       //< 记录上位上一次下发的“发生时间”
	float Time_Sum;        //< 时间累积
	float SIN_T;     //< 正弦函数周期 
}SINSOURCE_Sta_t;


/*模块参数结构体定义*/
struct SINSOURCE_T
{
	Model_Base_t Base;     //< 模块基本参数结构体
	SINSOURCE_Par_t Par;		   //< 模块可调参数结构体
	SINSOURCE_Sta_t Sta;		   //< 模块运算中间参数结构体
};


extern SINSOURCE_T* SINSOURCE_t;

/*函数*/
bool CALCU_SAMA(SINSOURCE)(Model_Base_t* arg, float dt, bool* DI, bool* DO, float* AI, float* AO);	  //< SAMA运算函数
int BC_PARA(SINSOURCE)(Model_Base_t* arg, void** Data);											      //< 广播SAMA参数变量函数（无参数需要广播的模块直接将BCPara函数设置为NULL即可）
int BAK_STA(SINSOURCE)(Model_Base_t* arg, void** Data);											      //< 备份SAMA运算中间参数
int ANA_STA(SINSOURCE)(Model_Base_t* arg, void** Data);											      //< 解析备份的SAMA运算中间参数
int CHANGE_PAR(SINSOURCE)(Model_Base_t* arg, void** Data);											  //< 在线修改模块参数函数
void INIT_STAPAR(SINSOURCE)(Model_Base_t* arg);												          //< 初始化模块运算中间参数


#endif
